package com.hyx.bookManager.domain.common;

/**
 * @ClassName CommonResult
 * @Description 统一返回接口类
 * @Author 黄乙轩
 * @Date 2021/6/7 21:45
 * @Version 1.0
 **/

public class CommonResult<T> {
    /**
     * 状态码
     */
    private int code;
    /**
     * 提示信息
     */
    private String msg;
    /**
     * 统一返回类所带参数
     */
    private T data;

    /**
     * 私有构造函数
     * @param code 统一返回状态码
     * @param msg 统一返回提示
     * @param data 统一返回类所带对象
     */
    private CommonResult(Code code,String msg,T data){
        this.code=code.getCode();
        this.msg=msg;
        this.data=data;
    }

    /**
     * 成功的统一返回接口类
     * @param <T> 所带参数
     * @return
     */
    public static <T> CommonResult success(){
        return new CommonResult(Code.SUCCESS,null,null);
    }

    /**
     * 返回带对象的统一成功返回类
     * @param data 所带对象
     * @param <T>
     * @return
     */
    public static <T> CommonResult<T> success(T data){
        return new CommonResult<>(Code.SUCCESS,null,data);
    }

    /**
     * 返回带对象与提示的统一成功返回类
     * @param msg 提示信息
     * @param data 所带对象
     * @param <T>
     * @return
     */
    public static <T> CommonResult<T> success(String msg,T data){
        return new CommonResult<>(Code.SUCCESS,msg,data);
    }

    /**
     * 统一失败返回接口
     * @param <T>
     * @return
     */
    public static <T> CommonResult<T> fail(){
        return new CommonResult<>(Code.FAIL,null,null);
    }

    /**
     * 统一失败返回接口
     * @param data 所带对象
     * @param <T>
     * @return
     */
    public static <T> CommonResult<T> fail(T data){
        return new CommonResult<>(Code.FAIL,null,data);
    }

    public int getCode() {
        return code;
    }

    public void setCode(Code code) {
        this.code = code.getCode();
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    /**
     * 统一失败返回接口
     * @param data 所带对象
     * @param msg 描述
     * @param <T>
     * @return
     */
    public static <T> CommonResult<T> fail(T data,String msg){
        return new CommonResult<>(Code.FAIL,msg,data);
    }


}
